package com.hy.utils.handler;

import com.hy.utils.ResultUtil;
import com.hy.utils.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    @ResponseBody
    @ExceptionHandler
    //处理所有异常处理
    public ResultUtil handlerException(BindException e ){    //BindException前端异常

        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();

        List<String> msgList = fieldErrors.stream()
                .map(o -> o.getDefaultMessage())
                .collect(Collectors.toList());

        String messages = StringUtils.join(msgList.toArray(), ";");
        System.out.println(messages);
        return ResultUtil.ok().put("前端数据不符合要求",messages);
    }

    /*
        后台报错：
            部分信息返回到前台，比如：添加失败
            部分信息，打印到控制台 或是插入到日志中 或是 保存到数据库中
    */
    @ExceptionHandler(value = BizException.class)
    @ResponseBody
    public ResultUtil handleException(BizException e){
        return ResultUtil.error("后端报错，数据不符合要求",e.getMessage());
    }

}
